#include<iostream>
#include<algorithm>
using namespace std;
struct ily{
	int jg=0;
	int zl=0;
};
bool comp(ily x,ily y){
	return x.zl<y.zl;
}
int main(){
	int n,m;
	cin>>n>>m;
	ily x[n];
	for(int i=0;i<n;i++){
		cin>>x[i].jg>>x[i].zl;
	}
	int a[n+1][m+1]={0};
	for(int i=0;i<=n;i++){
		a[i][0]=0;
	}
	for(int i=0;i<=m;i++){
		a[0][i]=0;
	}
	for(int i=1;i<=n;i++){
		for(int j=x[i-1].zl;j<=m;j++){
			int max=0;
			if((a[i-1][j-x[i-1].zl]+x[i-1].jg)>max){
				max=a[i-1][j-x[i-1].zl]+x[i-1].jg;
			}
			if(a[i-1][j]>max){
				max=a[i-1][j];
			}
			a[i][j]=max;
		}
	}
	cout<<a[n][m];
}
